home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / dev / src / td01_src.lha / td_r0.1 / source / LibInit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-04-19  |  4.9 KB  |  156 lines

  1. /*
  2. **      $VER: LibInit.c 0.2 (28.03.99)
  3. **
  4. **      Library initializers and functions to be called by StartUp.c
  5. **
  6. **      (C) Copyright 1996-98 Andreas R. Kleinert
  7. **      All Rights Reserved.
  8. **
  9. **      Modified by Stephan Bielman for 3do library.
  10. **
  11. **      Creation date     : 11.4.99
  12. **      Last modification : 11.4.99
  13. */
  14.  
  15. #define __USE_SYSBASE        // perhaps only recognized by SAS/C
  16.  
  17. #include <exec/types.h>
  18. #include <exec/memory.h>
  19. #include <exec/libraries.h>
  20. #include <exec/execbase.h>
  21. #include <exec/resident.h>
  22. #include <exec/initializers.h>
  23.  
  24. #ifdef __MAXON__
  25. #include <clib/exec_protos.h>
  26. #else
  27. #include <proto/exec.h>
  28. #endif
  29. #include "compiler.h"
  30.  
  31. #ifdef __GNUC__
  32. #include "../dev/include/tdo/tdobase.h"
  33. #elif VBCC
  34. #include "include/tdo/tdobase.h"
  35. #else
  36. #include "include/tdo/tdobase.h"
  37. #endif
  38.  
  39. ULONG __saveds __stdargs L_OpenLibs(struct tdoBase *tdoBase);
  40. void  __saveds __stdargs L_CloseLibs(void);
  41.  
  42. struct ExecBase      *SysBase       = NULL;
  43.  
  44. #define VERSION  00
  45. #define REVISION 01
  46.  
  47. char __aligned MwLibName [] = "tdo.library";
  48. char __aligned MwLibID   [] = "$VER:tdo 0.1 (11.4.99)";
  49. char __aligned Copyright [] = "(C)opyright 1999 by Stephan Bielmann. All rights reserved.";
  50.  
  51.  
  52. /* ----------------------------------------------------------------------------------------
  53.    ! ROMTag and Library inilitalization structure:
  54.    !
  55.    ! Below you find the ROMTag, which is the most important "magic" part of a library
  56.    ! (as for any other resident module). You should not need to modify any of the
  57.    ! structures directly, since all the data is referenced from constants from somewhere else.
  58.    !
  59.    ! You may place the ROMTag directly after the LibStart (-> StartUp.c) function as well.
  60.    !
  61.    ! Note, that the data initialization structure may be somewhat redundant - it's
  62.    ! for demonstration purposes.
  63.    !
  64.    ! EndResident can be placed somewhere else - but it must follow the ROMTag and
  65.    ! it must not be placed in a different SECTION.
  66.    ---------------------------------------------------------------------------------------- */
  67.  
  68. extern ULONG InitTab[];
  69. extern APTR EndResident; /* below */
  70.  
  71. struct Resident __aligned ROMTag =     /* do not change */
  72. {
  73.  RTC_MATCHWORD,
  74.  &ROMTag,
  75.  &EndResident,
  76.  RTF_AUTOINIT,
  77.  VERSION,
  78.  NT_LIBRARY,
  79.  0,
  80.  &MwLibName[0],
  81.  &MwLibID[0],
  82.  &InitTab[0]
  83. };
  84.  
  85. APTR EndResident;
  86.  
  87. struct MyDataInit                      /* do not change */
  88. {
  89.  UWORD ln_Type_Init;      UWORD ln_Type_Offset;      UWORD ln_Type_Content;
  90.  UBYTE ln_Name_Init;      UBYTE ln_Name_Offset;      ULONG ln_Name_Content;
  91.  UWORD lib_Flags_Init;    UWORD lib_Flags_Offset;    UWORD lib_Flags_Content;
  92.  UWORD lib_Version_Init;  UWORD lib_Version_Offset;  UWORD lib_Version_Content;
  93.  UWORD lib_Revision_Init; UWORD lib_Revision_Offset; UWORD lib_Revision_Content;
  94.  UBYTE lib_IdString_Init; UBYTE lib_IdString_Offset; ULONG lib_IdString_Content;
  95.  ULONG ENDMARK;
  96. } DataTab =
  97. #ifdef VBCC
  98. {
  99.         0xe000,8,NT_LIBRARY,
  100.         0x0080,10,(ULONG) &MwLibName[0],
  101.         0xe000,LIBF_SUMUSED|LIBF_CHANGED,
  102.         0xd000,20,VERSION,
  103.         0xd000,22,REVISION,
  104.         0x80,24,(ULONG) &MwLibID[0],
  105.         (ULONG) 0
  106. };
  107. #else
  108. {
  109.  INITBYTE(OFFSET(Node,         ln_Type),      NT_LIBRARY),
  110.  0x80, (UBYTE) OFFSET(Node,    ln_Name),      (ULONG) &MwLibName[0],
  111.  INITBYTE(OFFSET(Library,      lib_Flags),    LIBF_SUMUSED|LIBF_CHANGED),
  112.  INITWORD(OFFSET(Library,      lib_Version),  VERSION),
  113.  INITWORD(OFFSET(Library,      lib_Revision), REVISION),
  114.  0x80, (UBYTE) OFFSET(Library, lib_IdString), (ULONG) &MwLibID[0],
  115.  (ULONG) 0
  116. };
  117. #endif
  118.  
  119.  
  120. /* ----------------------------------------------------------------------------------------
  121.    ! L_OpenLibs:
  122.    !
  123.    ! Since this one is called by InitLib, libraries not shareable between Processes or
  124.    ! libraries messing with RamLib (deadlock and crash) may not be opened here.
  125.    !
  126.    ! You may bypass this by calling this function fromout LibOpen, but then you will
  127.    ! have to a) protect it by a semaphore and b) make sure, that libraries are only
  128.    ! opened once (when using global library bases).
  129.    ---------------------------------------------------------------------------------------- */
  130.  
  131. ULONG __saveds __stdargs L_OpenLibs(struct tdoBase *tdoBase)
  132. {
  133.  SysBase = (*((struct ExecBase **) 4));
  134.  
  135.  tdoBase->tdb_SysBase     = SysBase;
  136.  
  137.  return(TRUE);
  138. }
  139.  
  140. /* ----------------------------------------------------------------------------------------
  141.    ! L_CloseLibs:
  142.    !
  143.    ! This one by default is called by ExpungeLib, which only can take place once
  144.    ! and thus per definition is single-threaded.
  145.    !
  146.    ! When calling this fromout LibClose instead, you will have to protect it by a
  147.    ! semaphore, since you don't know whether a given CloseLibrary(foobase) may cause a Wait().
  148.    ! Additionally, there should be protection, that a library won't be closed twice.
  149.    ---------------------------------------------------------------------------------------- */
  150.  
  151. void __saveds __stdargs L_CloseLibs(void)
  152. {
  153.  
  154. }
  155.  
  156.